背景

农上线了一款新皮肤——姬小满的战舞者。皮肤的获取是通过投骰子走地图的方式进行的。

地图一共12格,投一次骰子的结果也可能在1~12间取值。当走到地图终点(即走完12格),就可以获得皮肤。每一投需要花费30点券(即RMB 3元)。如果按最坏情况来算,一共要投12次,即36元才能得到这个皮肤,这太贵了!

投一次骰子得到各个值的概率并不相等。投一次骰子得到值 $i$ 的概率以$p_i$来表示。具体概率为:

p = [0.72, 0.13, 0.03, 0.02, 0.02, 0.015, 0.015, 0.01, 0.01, 0.01, 0.01, 0.01]

囊中羞涩的牢玩家想要知道,获得皮肤的期望投骰子次数是多少。换句话说,即不断投骰子,直到总点数不小于12,期望的投骰子数是多少。

如果直接计算投一次骰子的期望$s$并认为期望次数是$12/s$,是错误的。

这个问题需要使用期望递推求解。

期望递推一般采用逆推,即从终点逆推到起点。定义状态为从当前状态到终点状态需要的期望次数:

即我们定义$E(S)$表示当前点数为$S$时投到点数不少于12点需要的期望次数。

显然,$E(12)=0$,从$0$开始投的期望为$E(0)$。

从当前点数$S$到达12的期望为: $$ E(S) = 1 + \sum_{i=1}^{12}p_iE(S+i) $$ 我们可以认为$E(x) = 0(x\geq 12)$

从而得到了$E(S)$的递推式。从$E(12)$开始逆序递推求解,就能得到答案$E(0)$,计算得到$E(0)$大约为$7.0525750764758595$,即大概7抽210点券就能拿下皮肤。算上首抽一元活动,期望190点券就能拿下。

期望递推的数学原理

在我们的递推式中,出现了一个很诡异的模式:概率乘期望。看起来,这和我们平常计算期望的方式格格不入。

期望递推事实上基于全期望公式,即: $$ E(X) = E(E(X|Y)) $$

记$Y$为骰子投到的点数,我们可以重新解释上面的递推公式: $$ E(S) = E(E(S|Y)) $$ 即当前点数为$S$投到12的期望次数为在投出一枚骰子投到$Y$的条件下再从$S$到达12的期望次数的期望(真长!)

而$E(S|Y)$就能跟之前的期望值扯上关系。投一枚骰子得到$Y$再到达12的期望次数为投一枚骰子的花费(1)加上从$S+Y$到达12的期望($E(S+Y)$)。即 $$ E(S|Y) = 1+E(S+Y) $$

从而, $$ E(E(S|Y)) = \sum_{i=1}^{12} p_iE(S|i)=\sum_{i=1}^{12} p_i(1+E(S+Y))=1 + \sum_{i=1}^{12}p_iE(S+i) $$

当然这太长了,实际运用期望递推时请相信自己的直觉,直接建立期望值之间的递推关系即可。一般不需要扯上条件期望。